package org.lbm.flow.node;

import org.lbm.flow.context.FlowContext;
import org.lbm.flow.agent.Agent;

import java.util.List;
import java.util.Map;

/**
 * 工作流节点接口
 * 定义工作流节点的基本行为
 *
 * @author insist
 * @since 2025-08-01
 */
public interface Node {

    /**
     * 获取节点ID
     */
    String getId();

    /**
     * 获取节点名称
     */
    String getName();

    /**
     * 获取节点类型
     */
    String getType();

    /**
     * 获取节点描述
     */
    String getDescription();

    /**
     * 获取节点配置
     */
    Map<String, Object> getConfig();

    /**
     * 获取前置节点
     */
    List<String> getPredecessors();

    /**
     * 获取后置节点
     */
    List<String> getSuccessors();

    /**
     * 添加前置节点
     */
    void addPredecessor(String nodeId);

    /**
     * 添加后置节点
     */
    void addSuccessor(String nodeId);

    /**
     * 检查是否可以执行
     */
    boolean canExecute(FlowContext context);

    /**
     * 执行节点
     */
    NodeResult execute(FlowContext context);

    /**
     * 获取节点关联的智能体
     */
    default Agent getAgent() {
        return null;
    }

    /**
     * 设置节点关联的智能体
     */
    default void setAgent(Agent agent) {
        // 默认实现为空
    }

    /**
     * 获取节点超时时间（毫秒）
     */
    default long getTimeout() {
        return 30000; // 默认30秒
    }

    /**
     * 设置节点超时时间
     */
    default void setTimeout(long timeout) {
        // 默认实现为空
    }

    /**
     * 检查节点是否启用
     */
    default boolean isEnabled() {
        return true;
    }

    /**
     * 设置节点启用状态
     */
    default void setEnabled(boolean enabled) {
        // 默认实现为空
    }
}
